#include "my_ui_api.h"
#include "screens.h"
#include "styles.h"
#include "sd_fatfs_driver.h"
#include "ff.h"
#include "esp_camera.h"
#include <dirent.h>
#include <stdio.h>

static const char *TAG = "my_ui_api";

#define MAX_FILES 50           // 根据实际情况调整
char file_list[MAX_FILES][64]; // 保存文件名的数组（假设文件名不超过64字符）
int file_count = 0;

extern void wifi_select_cb(lv_event_t *e);
extern void picture_select_cb(lv_event_t *e);
void add_wifi_panel(int16_t signal, char *wifi_name, bool has_passssword)
{
    extern lv_img_dsc_t img_wi_fi_1_32, img_wi_fi_2_32, img_wi_fi_3_32, img_wi_fi_4_32, img_lock, img_turn_right;
    lv_obj_t *parent_obj = objects.wifi_list;
    {
        lv_obj_t *obj = lv_obj_create(parent_obj);
        lv_obj_set_pos(obj, 36, 75);
        lv_obj_set_size(obj, 250, 41);
        lv_obj_set_scrollbar_mode(obj, LV_SCROLLBAR_MODE_OFF);
        lv_obj_set_scroll_dir(obj, LV_DIR_NONE);
        lv_obj_set_scroll_snap_x(obj, LV_SCROLL_SNAP_NONE);
        lv_obj_set_scroll_snap_y(obj, LV_SCROLL_SNAP_NONE);
        lv_obj_set_style_border_width(obj, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
        lv_obj_set_style_bg_color(obj, lv_color_hex(0xfff5f5f5), LV_PART_MAIN | LV_STATE_DEFAULT);
        lv_obj_set_style_bg_color(obj, lv_color_hex(0xffd3d3d3), LV_PART_MAIN | LV_STATE_PRESSED);
        char *wifi_name_copy = lv_mem_alloc(strlen(wifi_name) + 1);
        strcpy(wifi_name_copy, wifi_name);
        lv_obj_add_event_cb(obj, wifi_select_cb, LV_EVENT_CLICKED, (void *)wifi_name_copy);
        {
            lv_obj_t *parent_obj = obj;
            {
                lv_obj_t *obj = lv_img_create(parent_obj);
                lv_obj_set_pos(obj, -3, -10);
                lv_obj_set_size(obj, 30, 30);
                if (signal > -50)
                {
                    lv_img_set_src(obj, &img_wi_fi_1_32);
                }
                else if (signal > -70)
                {
                    lv_img_set_src(obj, &img_wi_fi_2_32);
                }
                else if (signal > -80)
                {
                    lv_img_set_src(obj, &img_wi_fi_3_32);
                }
                else
                {
                    lv_img_set_src(obj, &img_wi_fi_4_32);
                }
                lv_img_set_zoom(obj, 200);
            }
            {
                lv_obj_t *obj = lv_label_create(parent_obj);
                lv_obj_set_pos(obj, -39, 2);
                lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
                lv_label_set_text(obj, wifi_name);
                add_style_default_lab(obj);
            }
            if (has_passssword)
            {
                lv_obj_t *obj = lv_img_create(parent_obj);
                lv_obj_set_pos(obj, 167, -9);
                lv_obj_set_size(obj, 30, 30);
                lv_img_set_src(obj, &img_lock);
                lv_img_set_zoom(obj, 150);
                lv_obj_set_style_img_opa(obj, 200, LV_PART_MAIN | LV_STATE_DEFAULT);
                lv_obj_set_style_img_recolor(obj, lv_color_hex(0xff000000), LV_PART_MAIN | LV_STATE_DEFAULT);
            }
            {
                lv_obj_t *obj = lv_img_create(parent_obj);
                lv_obj_set_pos(obj, 200, -9);
                lv_obj_set_size(obj, 30, 30);
                lv_img_set_src(obj, &img_turn_right);
                lv_img_set_zoom(obj, 150);
            }
        }
    }
}

void add_jpg_dir(char *jpg_name)
{
    lv_obj_t *btn;
    btn = lv_list_add_btn(objects.picture_list, NULL, jpg_name);
    char *jpg_name_copy = lv_mem_alloc(strlen(jpg_name) + 1);
    strcpy(jpg_name_copy, jpg_name);
    lv_obj_add_event_cb(btn, picture_select_cb, LV_EVENT_CLICKED, (void *)jpg_name_copy);
    lv_group_remove_obj(btn);
}

lv_obj_t *spinner;

void show_spinner()
{
    spinner = lv_spinner_create(lv_scr_act(), 1000, 60);
    lv_obj_set_pos(spinner, 135, 95);
    lv_obj_set_size(spinner, 50, 50);
    lv_obj_set_style_arc_opa(spinner, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_arc_color(spinner, lv_color_hex(0xff767676), LV_PART_INDICATOR | LV_STATE_DEFAULT);
    lv_obj_set_style_arc_width(spinner, 10, LV_PART_INDICATOR | LV_STATE_DEFAULT);
    lv_obj_set_style_arc_opa(spinner, 150, LV_PART_INDICATOR | LV_STATE_DEFAULT);
    lv_obj_set_style_arc_rounded(spinner, false, LV_PART_INDICATOR | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(spinner, 9, LV_PART_INDICATOR | LV_STATE_DEFAULT);
}

void close_spinner()
{
    lv_obj_del(spinner);
}

// void show_picture()
// {
//     const char *path = "S:/testImg.bin";
//     lv_fs_file_t file;

//     // 1. 打开文件（带错误检查）
//     lv_fs_res_t res = lv_fs_open(&file, path, LV_FS_MODE_RD);
//     if (res != LV_FS_RES_OK)
//     {
//         printf("文件打开失败: %d\n", res);
//         return;
//     }

//     // 2. 获取文件大小
//     uint32_t size;
//     lv_fs_seek(&file, 0, LV_FS_SEEK_END); // 跳到文件末尾
//     lv_fs_tell(&file, &size);             // 获取大小
//     lv_fs_seek(&file, 0, LV_FS_SEEK_SET); // 回到文件开头

//     printf("文件大小: %u\n", size);

//     // 3. 分配DMA对齐的内存（关键修复！）
//     uint8_t *img_data = (uint8_t *)heap_caps_malloc(size, MALLOC_CAP_DMA);
//     if (img_data == NULL)
//     {
//         printf("内存分配失败\n");
//         lv_fs_close(&file);
//         return;
//     }

//     // 4. 读取文件内容
//     uint32_t bytes_read;
//     res = lv_fs_read(&file, img_data, size, &bytes_read);
//     if (res != LV_FS_RES_OK || bytes_read != size)
//     {
//         printf("文件读取失败: %d，已读 %u/%u 字节\n", res, bytes_read, size);
//         free(img_data); // 记得释放内存
//         lv_fs_close(&file);
//         return;
//     }

//     // 5. 关闭文件
//     lv_fs_close(&file);

//     // 6. 创建图像描述符
//     lv_img_dsc_t img_dsc = {
//         .header = {
//             .always_zero = 0,
//             .w = 320,               // 图像宽度（需与实际一致）
//             .h = 240,               // 图像高度（需与实际一致）
//             .cf = LV_IMG_CF_TRUE_COLOR, // 颜色格式
//         },
//         .data_size = size,
//         .data = img_data // 指向已加载的图像数据
//     };

//     printf("前16字节: ");
//     for (int i = 0; i < 16; i++)
//         printf("%02X ", img_dsc.data[i]);
//     printf("\n");

//     // 7. 创建并显示图像
//     lv_obj_t *objpg = lv_img_create(lv_scr_act());
//     lv_img_set_src(objpg, &img_dsc);
//     lv_obj_center(objpg);
// }

static lv_obj_t *close_button = NULL, *img_jpg = NULL, *fille_name_label = NULL;
static void event_handler_cb_picture_show_close_button(lv_event_t *e)
{
    ESP_LOGI(TAG, "close button clicked");
    eez_flow_set_screen(SCREEN_ID_PAGE_3, LV_SCR_LOAD_ANIM_FADE_ON, 200, 0);
    // if (close_button != NULL)
    // {
    //     lv_obj_del(close_button);
    //     ESP_LOGI(TAG, "del close_button");
    // }

    if (img_jpg != NULL)
    {
        lv_obj_del(img_jpg);
        img_jpg = NULL;
        close_button = NULL;
        fille_name_label = NULL;
        ESP_LOGI(TAG, "del img_jpg");
    }
}
void show_picture(const char *jpg_name)
{
    if (img_jpg == NULL)
    {
        const char path[20];
        sprintf(path, "S:/%s", jpg_name);
        img_jpg = lv_img_create(lv_scr_act());
        lv_img_set_src(img_jpg, path);
        lv_obj_center(img_jpg);
    }
    if (close_button == NULL)
    {
        close_button = lv_btn_create(img_jpg);
        lv_obj_set_pos(close_button, 1, 0);
        lv_obj_set_size(close_button, 42, 40);
        lv_obj_add_event_cb(close_button, event_handler_cb_picture_show_close_button, LV_EVENT_CLICKED, NULL);

        lv_obj_set_style_bg_opa(close_button, 0, LV_PART_MAIN | LV_STATE_DEFAULT); // 背景透明度100%
        lv_obj_set_style_border_width(close_button, 0, LV_PART_MAIN);              // 边框宽度归零
        lv_obj_set_style_shadow_width(close_button, 0, LV_PART_MAIN);              // 关闭阴影
        lv_obj_set_style_outline_width(close_button, 0, LV_PART_MAIN);             // 消除轮廓线
        lv_group_remove_obj(close_button);
        {
            lv_obj_t *obj = lv_label_create(close_button);
            lv_obj_set_pos(obj, 0, 0);
            lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
            lv_label_set_text(obj, LV_SYMBOL_CLOSE);
            lv_obj_set_style_align(obj, LV_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_text_color(obj, lv_color_hex(0xffbcbcbc), LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_text_font(obj, &lv_font_montserrat_20, LV_PART_MAIN | LV_STATE_DEFAULT);
        }
    }
    if (fille_name_label == NULL)
    {
        fille_name_label = lv_label_create(img_jpg);
        lv_obj_set_pos(fille_name_label, 0, 112);
        lv_obj_set_size(fille_name_label, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
        lv_label_set_text(fille_name_label, jpg_name);
        add_style_default_lab(fille_name_label);
        lv_obj_set_style_align(fille_name_label, LV_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
        lv_obj_set_style_text_color(fille_name_label, lv_color_hex(0xffbcbcbc), LV_PART_MAIN | LV_STATE_DEFAULT);
        lv_obj_set_style_text_font(fille_name_label, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
    }
}